{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./Resources/ai-sk-add-wechat.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SK  使用依赖注入\n",
    "\n",
    "[依赖注入](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection)使得应用程序关注点分离，易于构建松耦合和易于测试的应用，SK 很好的支持依赖注入。本节将详细介绍如何更好的使用依赖注 入进行SK相关服务的注册和管理。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 注册 Kernel 服务\n",
    "\n",
    "### 导入相关NuGet包和定义的类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Extensions.Configuration, 8.0.0</span></li><li><span>Microsoft.Extensions.Configuration.Binder, 8.0.2</span></li><li><span>Microsoft.Extensions.Configuration.Json, 8.0.1</span></li><li><span>Microsoft.Extensions.DependencyInjection, 8.0.1</span></li><li><span>Microsoft.SemanticKernel, 1.25.0</span></li><li><span>Microsoft.SemanticKernel.Connectors.AzureOpenAI, 1.25.0</span></li><li><span>Microsoft.SemanticKernel.Connectors.OpenAI, 1.25.0</span></li></ul></div></div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#r \"nuget:Microsoft.Extensions.Configuration\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.Json\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.Binder\"\n",
    "#r \"nuget:Microsoft.SemanticKernel\"\n",
    "#r \"nuget:Microsoft.SemanticKernel.Connectors.OpenAI\"\n",
    "#r \"nuget:Microsoft.SemanticKernel.Connectors.AzureOpenAI\"\n",
    "// 安装依赖注入NuGet包\n",
    "#r \"nuget:Microsoft.Extensions.DependencyInjection\"\n",
    "\n",
    "\n",
    "#!import Config/AiProvider.cs\n",
    "#!import Config/AiOptions.cs\n",
    "#!import Config/AiSettings.cs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 抽象AI 服务注册器\n",
    "\n",
    "对于SK 而言，其核心就是基于构建好的`Kernel`进行服务调用，因此AI 服务注册器的核心就是构建`Kernel`。就目前而言大多数AI 服务提供商均提供文本补全和嵌入接口，因此定义了两个抽象方法供子类自行实现：\n",
    "* `RegisterChatCompletionService`： 用于注册聊天补全服务\n",
    "* `RegisterEmbeddingService`：用于注册文本嵌入服务\n",
    "\n",
    "其中包含两个虚方法：\n",
    "* `Register`，其核心就是使用`AddKeyedTransient`按照AI 提供商的Code进行注册，注册为不同的命名Kernel，以便运行时动态获取。具体使用到了[Keyed Services](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection) 特性。\n",
    "* `BuildKernel`，其核心就是构建`Kernel`，主要是对`RegisterChatCompletionService`和`RegisterEmbeddingService` 两个方法的调用。当需要注册其他服务时，可以自行重载。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "using Microsoft.Extensions.DependencyInjection;\n",
    "using Microsoft.SemanticKernel;\n",
    "\n",
    "public abstract class AiProviderRegister\n",
    "{\n",
    "    public abstract AiProviderType AiProviderType { get; }\n",
    "\n",
    "    public virtual void Register(IServiceCollection services, AiProvider aiProvider)\n",
    "    {\n",
    "        // 为指定AiProvider 注册专用Kernel服务\n",
    "        services.AddKeyedTransient<Kernel>(aiProvider.Code, (sp, key) => BuildKernel(sp, aiProvider));\n",
    "    }\n",
    "\n",
    "    public virtual Kernel BuildKernel(IServiceProvider serviceProvider, AiProvider aiProvider)\n",
    "    {\n",
    "        // 创建Kernel构建器\n",
    "        var builder = Kernel.CreateBuilder();\n",
    "\n",
    "        RegisterChatCompletionService(builder, serviceProvider, aiProvider);\n",
    "        RegisterEmbeddingService(builder, serviceProvider, aiProvider);\n",
    "        \n",
    "        // Register other services if needed\n",
    "\n",
    "        return builder.Build();\n",
    "    }\n",
    "\n",
    "    protected abstract void RegisterChatCompletionService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider);\n",
    "\n",
    "    protected abstract void RegisterEmbeddingService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider);\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实现AI 服务注册器\n",
    "接下来就为具体的AI服务提供商类型分别实现自定义的AI 服务注册器："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### OpenAI 服务注册器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "using System.Diagnostics.CodeAnalysis;\n",
    "using Microsoft.SemanticKernel;\n",
    "\n",
    "public class OpenAiRegister : AiProviderRegister\n",
    "{\n",
    "    public override AiProviderType AiProviderType => AiProviderType.OpenAI;\n",
    "\n",
    "    protected override void RegisterChatCompletionService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider)\n",
    "    {\n",
    "        var chatModelId = aiProvider.GetChatCompletionApiService()?.ModelId;\n",
    "        if (string.IsNullOrWhiteSpace(chatModelId))\n",
    "        {\n",
    "            return;\n",
    "        }\n",
    "\n",
    "        builder.AddOpenAIChatCompletion(modelId: chatModelId, apiKey: aiProvider.ApiKey);\n",
    "    }\n",
    "\n",
    "    [Experimental(\"SKEXP0010\")]\n",
    "    protected override void RegisterEmbeddingService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider)\n",
    "    {\n",
    "        var embeddingModelId = aiProvider.GetEmbeddingApiService()?.ModelId;\n",
    "        if (string.IsNullOrWhiteSpace(embeddingModelId))\n",
    "        {\n",
    "            return;\n",
    "        }\n",
    "\n",
    "        builder.AddOpenAITextEmbeddingGeneration(embeddingModelId, aiProvider.ApiKey);\n",
    "    }\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### AzureOpenAI 服务注册器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "using System.Diagnostics.CodeAnalysis;\n",
    "using Microsoft.SemanticKernel;\n",
    "\n",
    "public class AzureOpenAiRegister : AiProviderRegister\n",
    "{\n",
    "    public override AiProviderType AiProviderType => AiProviderType.AzureOpenAI;\n",
    "\n",
    "    protected override void RegisterChatCompletionService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider)\n",
    "    {\n",
    "        var modelId = aiProvider.GetChatCompletionApiService()?.ModelId;\n",
    "\n",
    "        // 如果未找到ModelId，说明该AI提供商未提供对应服务，则直接返回builder\n",
    "        if (string.IsNullOrWhiteSpace(modelId))\n",
    "        {\n",
    "            return;\n",
    "        }\n",
    "\n",
    "        builder.AddAzureOpenAIChatCompletion(\n",
    "            deploymentName: modelId,\n",
    "            endpoint: aiProvider.ApiEndpoint,\n",
    "            apiKey: aiProvider.ApiKey);\n",
    "    }\n",
    "\n",
    "    [Experimental(\"SKEXP0010\")]\n",
    "    protected override void RegisterEmbeddingService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider)\n",
    "    {\n",
    "        var modelId = aiProvider.GetEmbeddingApiService()?.ModelId;\n",
    "\n",
    "        // 如果未找到ModelId，说明该AI提供商未提供对应服务，则直接返回builder\n",
    "        if (string.IsNullOrWhiteSpace(modelId))\n",
    "        {\n",
    "            return;\n",
    "        }\n",
    "\n",
    "        builder.AddAzureOpenAITextEmbeddingGeneration(\n",
    "            deploymentName: modelId,\n",
    "            endpoint: aiProvider.ApiEndpoint,\n",
    "            apiKey: aiProvider.ApiKey);\n",
    "    }\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 兼容OpenAI 的服务注册器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "using System.ClientModel;\n",
    "using System.Diagnostics.CodeAnalysis;\n",
    "using Microsoft.SemanticKernel;\n",
    "using OpenAI;\n",
    "\n",
    "public class OpenAiCompatibleAiRegister : AiProviderRegister\n",
    "{\n",
    "    public override AiProviderType AiProviderType => AiProviderType.OpenAI_Compatible;\n",
    "\n",
    "    protected override void RegisterChatCompletionService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider)\n",
    "    {\n",
    "        var chatModelId = aiProvider.GetChatCompletionApiService()?.ModelId;\n",
    "        if (string.IsNullOrWhiteSpace(chatModelId))\n",
    "        {\n",
    "            return;\n",
    "        }\n",
    "\n",
    "        OpenAIClientOptions clientOptions = new OpenAIClientOptions\n",
    "        {\n",
    "            Endpoint = new Uri(aiProvider.ApiEndpoint)\n",
    "        };\n",
    "\n",
    "        OpenAIClient client = new(new ApiKeyCredential(aiProvider.ApiKey), clientOptions);\n",
    "\n",
    "        builder.AddOpenAIChatCompletion(modelId: chatModelId, openAIClient: client);\n",
    "    }\n",
    "\n",
    "    [Experimental(\"SKEXP0010\")]\n",
    "    protected override void RegisterEmbeddingService(IKernelBuilder builder, IServiceProvider provider, AiProvider aiProvider)\n",
    "    {\n",
    "        var embeddingModelId = aiProvider.GetEmbeddingApiService()?.ModelId;\n",
    "        if (string.IsNullOrWhiteSpace(embeddingModelId))\n",
    "        {\n",
    "            return;\n",
    "        }\n",
    "\n",
    "        OpenAIClientOptions clientOptions = new OpenAIClientOptions\n",
    "        {\n",
    "            Endpoint = new Uri(aiProvider.ApiEndpoint)\n",
    "        };\n",
    "\n",
    "        OpenAIClient client = new(new ApiKeyCredential(aiProvider.ApiKey), clientOptions);\n",
    "\n",
    "        builder.AddOpenAITextEmbeddingGeneration(embeddingModelId, openAIClient: client);\n",
    "    }\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 定义AI服务注册工厂类\n",
    "\n",
    "有了不同类型的AI 服务注册类，即可通过简单定义一个简单的静态工厂来根据类型获取对应的AI服务注册类："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "public static class AiProviderRegisterFactory\n",
    "{\n",
    "    public static AiProviderRegister Create(AiProviderType aiProviderType)\n",
    "    {\n",
    "        return aiProviderType switch\n",
    "        {\n",
    "            AiProviderType.OpenAI => new OpenAiRegister(),\n",
    "            AiProviderType.OpenAI_Compatible => new OpenAiCompatibleAiRegister(),\n",
    "            AiProviderType.AzureOpenAI => new AzureOpenAiRegister(),\n",
    "            _ => throw new NotImplementedException($\"No AI register for nameof(aiProviderType)\")\n",
    "        };\n",
    "    }\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 定义服务注册扩展方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "using Microsoft.Extensions.DependencyInjection;\n",
    "\n",
    "public static IServiceCollection RegisterKernels(this IServiceCollection services)\n",
    "{\n",
    "    // 从配置文件中加载AI配置\n",
    "    var aiOptions = AiSettings.LoadAiProvidersFromFile();\n",
    "    // 注册其他AI服务提供商\n",
    "    foreach (var aiProvider in aiOptions.Providers)\n",
    "    {\n",
    "        var providerRegister = AiProviderRegisterFactory.Create(aiProvider!.AiType);\n",
    "    \n",
    "        providerRegister.Register(services, aiProvider);\n",
    "    }\n",
    "    return services;\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 批量注册服务\n",
    "\n",
    "创建依赖注入容器并通过调用扩展方法完成服务的注册："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [],
   "source": [
    "// 初始化依赖注入容器\n",
    "var services = new ServiceCollection();\n",
    "\n",
    "// 注册Kernel服务\n",
    "services.RegisterKernels();\n",
    "\n",
    "// 构建ServiceProvider\n",
    "var serviceProvider = services.BuildServiceProvider();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用Kernel 服务\n",
    "\n",
    "上面完成了依赖注入容器的创建、服务的注册和依赖容器的构建，接下来就可以使用以下方式获取服务并调用："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "dotnet_interactive": {
     "language": "csharp"
    },
    "polyglot_notebook": {
     "kernelName": "csharp"
    },
    "vscode": {
     "languageId": "polyglot-notebook"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<details open=\"open\" class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>Semantic Kernel是一个轻量级的开源框架，通过它可以快速使用不同编程语言(C#/Python/Java)结合LLMs(OpenAI、Azure OpenAI、Hugging Face等模型)构建智能应用，简化将人工智能(AI)集成到现有解决方案中的流程。</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Function</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>InvokePromptAsync_59c8cb8888f24f0fa0fa9991649d36c9</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre>InvokePromptAsync_59c8cb8888f24f0fa0fa9991649d36c9</pre></div></td></tr><tr><td>PluginName</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Description</td><td><div class=\"dni-plaintext\"><pre>Generic function, unknown purpose</pre></div></td></tr><tr><td>Metadata</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>Microsoft.SemanticKernel.KernelFunctionMetadata</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre>InvokePromptAsync_59c8cb8888f24f0fa0fa9991649d36c9</pre></div></td></tr><tr><td>PluginName</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Description</td><td><div class=\"dni-plaintext\"><pre>Generic function, unknown purpose</pre></div></td></tr><tr><td>Parameters</td><td><i>(empty)</i></td></tr><tr><td>ReturnParameter</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>Microsoft.SemanticKernel.KernelReturnParameterMetadata</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Description</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>ParameterType</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Schema</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>AdditionalProperties</td><td><i>(empty)</i></td></tr></tbody></table></div></details></td></tr><tr><td>ExecutionSettings</td><td><i>(empty)</i></td></tr></tbody></table></div></details></td></tr><tr><td>Metadata</td><td><table><thead><tr><th><i>key</i></th><th><i>type</i></th><th>value</th></tr></thead><tbody><tr><td><div class=\"dni-plaintext\"><pre>Id</pre></div></td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/system.string?view=net-7.0\">System.String</a></span></td><td><div class=\"dni-plaintext\"><pre>chatcmpl-f4fc321fabf44bf2a0f0e63b0618b3cf</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>CreatedAt</pre></div></td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/system.datetimeoffset?view=net-7.0\">System.DateTimeOffset</a></span></td><td><span>2024-10-31 01:59:45Z</span></td></tr><tr><td><div class=\"dni-plaintext\"><pre>SystemFingerprint</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>Usage</pre></div></td><td>OpenAI.Chat.ChatTokenUsage</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>OpenAI.Chat.ChatTokenUsage</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>OutputTokenCount</td><td><div class=\"dni-plaintext\"><pre>67</pre></div></td></tr><tr><td>InputTokenCount</td><td><div class=\"dni-plaintext\"><pre>39</pre></div></td></tr><tr><td>TotalTokenCount</td><td><div class=\"dni-plaintext\"><pre>106</pre></div></td></tr><tr><td>OutputTokenDetails</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td><div class=\"dni-plaintext\"><pre>Refusal</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>FinishReason</pre></div></td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/system.string?view=net-7.0\">System.String</a></span></td><td><div class=\"dni-plaintext\"><pre>Stop</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>ContentTokenLogProbabilities</pre></div></td><td>OpenAI.ChangeTrackingList&lt;OpenAI.Chat.ChatTokenLogProbabilityDetails&gt;</td><td></td></tr></tbody></table></td></tr><tr><td>Culture</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code></code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Parent</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code></code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Parent</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code></code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Parent</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code></code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Parent</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code></code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Parent</td><td></td></tr><tr><td>LCID</td><td>127</td></tr><tr><td>KeyboardLayoutId</td><td>127</td></tr><tr><td>Name</td><td></td></tr><tr><td>IetfLanguageTag</td><td></td></tr><tr><td>DisplayName</td><td>Invariant Language (Invariant Country)</td></tr><tr><td>NativeName</td><td>Invariant Language (Invariant Country)</td></tr><tr><td>EnglishName</td><td>Invariant Language (Invariant Country)</td></tr><tr><td>TwoLetterISOLanguageName</td><td>iv</td></tr><tr><td>ThreeLetterISOLanguageName</td><td>ivl</td></tr><tr><td>ThreeLetterWindowsLanguageName</td><td>IVL</td></tr><tr><td>CompareInfo</td><td>CompareInfo - </td></tr><tr><td>TextInfo</td><td>TextInfo - </td></tr><tr><td>IsNeutralCulture</td><td>False</td></tr><tr><td>CultureTypes</td><td>SpecificCultures, InstalledWin32Cultures</td></tr><tr><td>NumberFormat</td><td>System.Globalization.NumberFormatInfo</td></tr><tr><td>DateTimeFormat</td><td>System.Globalization.DateTimeFormatInfo</td></tr><tr><td>Calendar</td><td>System.Globalization.GregorianCalendar</td></tr><tr><td>OptionalCalendars</td><td>[ System.Globalization.GregorianCalendar ]</td></tr><tr><td>UseUserOverride</td><td>False</td></tr><tr><td>IsReadOnly</td><td>True</td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>KeyboardLayoutId</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IetfLanguageTag</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>DisplayName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>NativeName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>EnglishName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>TwoLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>iv</pre></div></td></tr><tr><td>ThreeLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>ivl</pre></div></td></tr><tr><td>ThreeLetterWindowsLanguageName</td><td><div class=\"dni-plaintext\"><pre>IVL</pre></div></td></tr><tr><td>CompareInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>CompareInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Name</td><td></td></tr><tr><td>Version</td><td>System.Globalization.SortVersion</td></tr><tr><td>LCID</td><td>127</td></tr></tbody></table></div></details></td></tr><tr><td>TextInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>TextInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>ANSICodePage</td><td>1252</td></tr><tr><td>OEMCodePage</td><td>437</td></tr><tr><td>MacCodePage</td><td>10000</td></tr><tr><td>EBCDICCodePage</td><td>37</td></tr><tr><td>LCID</td><td>127</td></tr><tr><td>CultureName</td><td></td></tr><tr><td>IsReadOnly</td><td>True</td></tr><tr><td>ListSeparator</td><td>,</td></tr><tr><td>IsRightToLeft</td><td>False</td></tr></tbody></table></div></details></td></tr><tr><td>IsNeutralCulture</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>CultureTypes</td><td><span>SpecificCultures, InstalledWin32Cultures</span></td></tr><tr><td>NumberFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.NumberFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>CurrencyDecimalDigits</td><td>2</td></tr><tr><td>CurrencyDecimalSeparator</td><td>.</td></tr><tr><td>IsReadOnly</td><td>True</td></tr><tr><td>CurrencyGroupSizes</td><td>[ 3 ]</td></tr><tr><td>NumberGroupSizes</td><td>[ 3 ]</td></tr><tr><td>PercentGroupSizes</td><td>[ 3 ]</td></tr><tr><td>CurrencyGroupSeparator</td><td>,</td></tr><tr><td>CurrencySymbol</td><td>¤</td></tr><tr><td>NaNSymbol</td><td>NaN</td></tr><tr><td>CurrencyNegativePattern</td><td>0</td></tr><tr><td>NumberNegativePattern</td><td>1</td></tr><tr><td>PercentPositivePattern</td><td>0</td></tr><tr><td>PercentNegativePattern</td><td>0</td></tr><tr><td>NegativeInfinitySymbol</td><td>-Infinity</td></tr><tr><td>NegativeSign</td><td>-</td></tr><tr><td>NumberDecimalDigits</td><td>2</td></tr><tr><td>NumberDecimalSeparator</td><td>.</td></tr><tr><td>NumberGroupSeparator</td><td>,</td></tr><tr><td>CurrencyPositivePattern</td><td>0</td></tr><tr><td>PositiveInfinitySymbol</td><td>Infinity</td></tr><tr><td>PositiveSign</td><td>+</td></tr><tr><td>PercentDecimalDigits</td><td>2</td></tr><tr><td>PercentDecimalSeparator</td><td>.</td></tr><tr><td>PercentGroupSeparator</td><td>,</td></tr><tr><td>PercentSymbol</td><td>%</td></tr><tr><td>PerMilleSymbol</td><td>‰</td></tr><tr><td>NativeDigits</td><td>[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]</td></tr><tr><td>DigitSubstitution</td><td>None</td></tr></tbody></table></div></details></td></tr><tr><td>DateTimeFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.DateTimeFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>AMDesignator</td><td>AM</td></tr><tr><td>Calendar</td><td>System.Globalization.GregorianCalendar</td></tr><tr><td>DateSeparator</td><td>/</td></tr><tr><td>FirstDayOfWeek</td><td>Sunday</td></tr><tr><td>CalendarWeekRule</td><td>FirstDay</td></tr><tr><td>FullDateTimePattern</td><td>dddd, dd MMMM yyyy HH:mm:ss</td></tr><tr><td>LongDatePattern</td><td>dddd, dd MMMM yyyy</td></tr><tr><td>LongTimePattern</td><td>HH:mm:ss</td></tr><tr><td>MonthDayPattern</td><td>MMMM dd</td></tr><tr><td>PMDesignator</td><td>PM</td></tr><tr><td>RFC1123Pattern</td><td>ddd, dd MMM yyyy HH':'mm':'ss 'GMT'</td></tr><tr><td>ShortDatePattern</td><td>MM/dd/yyyy</td></tr><tr><td>ShortTimePattern</td><td>HH:mm</td></tr><tr><td>SortableDateTimePattern</td><td>yyyy'-'MM'-'dd'T'HH':'mm':'ss</td></tr><tr><td>TimeSeparator</td><td>:</td></tr><tr><td>UniversalSortableDateTimePattern</td><td>yyyy'-'MM'-'dd HH':'mm':'ss'Z'</td></tr><tr><td>YearMonthPattern</td><td>yyyy MMMM</td></tr><tr><td>AbbreviatedDayNames</td><td>[ Sun, Mon, Tue, Wed, Thu, Fri, Sat ]</td></tr><tr><td>ShortestDayNames</td><td>[ Su, Mo, Tu, We, Th, Fr, Sa ]</td></tr><tr><td>DayNames</td><td>[ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ]</td></tr><tr><td>AbbreviatedMonthNames</td><td>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</td></tr><tr><td>MonthNames</td><td>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</td></tr><tr><td>IsReadOnly</td><td>True</td></tr><tr><td>NativeCalendarName</td><td>Gregorian Calendar</td></tr><tr><td>AbbreviatedMonthGenitiveNames</td><td>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</td></tr><tr><td>MonthGenitiveNames</td><td>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</td></tr></tbody></table></div></details></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>MaxSupportedDateTime</td><td>12/31/9999 11:59:59 PM</td></tr><tr><td>AlgorithmType</td><td>SolarCalendar</td></tr><tr><td>CalendarType</td><td>Localized</td></tr><tr><td>Eras</td><td>[ 1 ]</td></tr><tr><td>TwoDigitYearMax</td><td>2049</td></tr><tr><td>IsReadOnly</td><td>True</td></tr></tbody></table></div></details></td></tr><tr><td>OptionalCalendars</td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td>System.Globalization.GregorianCalendar</td></tr></tbody></table></td></tr><tr><td>UseUserOverride</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>KeyboardLayoutId</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IetfLanguageTag</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>DisplayName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>NativeName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>EnglishName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>TwoLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>iv</pre></div></td></tr><tr><td>ThreeLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>ivl</pre></div></td></tr><tr><td>ThreeLetterWindowsLanguageName</td><td><div class=\"dni-plaintext\"><pre>IVL</pre></div></td></tr><tr><td>CompareInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>CompareInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>Version</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.SortVersion</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>FullVersion</td><td>26777</td></tr><tr><td>SortId</td><td>00006899-0000-0000-0000-00000000007f</td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>TextInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>TextInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>ANSICodePage</td><td><div class=\"dni-plaintext\"><pre>1252</pre></div></td></tr><tr><td>OEMCodePage</td><td><div class=\"dni-plaintext\"><pre>437</pre></div></td></tr><tr><td>MacCodePage</td><td><div class=\"dni-plaintext\"><pre>10000</pre></div></td></tr><tr><td>EBCDICCodePage</td><td><div class=\"dni-plaintext\"><pre>37</pre></div></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>CultureName</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>ListSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>IsRightToLeft</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>IsNeutralCulture</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>CultureTypes</td><td><span>SpecificCultures, InstalledWin32Cultures</span></td></tr><tr><td>NumberFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.NumberFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>CurrencyDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>CurrencyDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>CurrencyGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>NumberGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>PercentGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>CurrencyGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>CurrencySymbol</td><td><div class=\"dni-plaintext\"><pre>&#164;</pre></div></td></tr><tr><td>NaNSymbol</td><td><div class=\"dni-plaintext\"><pre>NaN</pre></div></td></tr><tr><td>CurrencyNegativePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>NumberNegativePattern</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr><tr><td>PercentPositivePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>PercentNegativePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>NegativeInfinitySymbol</td><td><div class=\"dni-plaintext\"><pre>-Infinity</pre></div></td></tr><tr><td>NegativeSign</td><td><div class=\"dni-plaintext\"><pre>-</pre></div></td></tr><tr><td>NumberDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>NumberDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>NumberGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>CurrencyPositivePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>PositiveInfinitySymbol</td><td><div class=\"dni-plaintext\"><pre>Infinity</pre></div></td></tr><tr><td>PositiveSign</td><td><div class=\"dni-plaintext\"><pre>+</pre></div></td></tr><tr><td>PercentDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>PercentDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>PercentGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>PercentSymbol</td><td><div class=\"dni-plaintext\"><pre>%</pre></div></td></tr><tr><td>PerMilleSymbol</td><td><div class=\"dni-plaintext\"><pre>‰</pre></div></td></tr><tr><td>NativeDigits</td><td><div class=\"dni-plaintext\"><pre>[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]</pre></div></td></tr><tr><td>DigitSubstitution</td><td><span>None</span></td></tr></tbody></table></div></details></td></tr><tr><td>DateTimeFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.DateTimeFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>AMDesignator</td><td><div class=\"dni-plaintext\"><pre>AM</pre></div></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>MaxSupportedDateTime</td><td>12/31/9999 11:59:59 PM</td></tr><tr><td>AlgorithmType</td><td>SolarCalendar</td></tr><tr><td>CalendarType</td><td>Localized</td></tr><tr><td>Eras</td><td>[ 1 ]</td></tr><tr><td>TwoDigitYearMax</td><td>2049</td></tr><tr><td>IsReadOnly</td><td>True</td></tr></tbody></table></div></details></td></tr><tr><td>DateSeparator</td><td><div class=\"dni-plaintext\"><pre>/</pre></div></td></tr><tr><td>FirstDayOfWeek</td><td><span>Sunday</span></td></tr><tr><td>CalendarWeekRule</td><td><span>FirstDay</span></td></tr><tr><td>FullDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>dddd, dd MMMM yyyy HH:mm:ss</pre></div></td></tr><tr><td>LongDatePattern</td><td><div class=\"dni-plaintext\"><pre>dddd, dd MMMM yyyy</pre></div></td></tr><tr><td>LongTimePattern</td><td><div class=\"dni-plaintext\"><pre>HH:mm:ss</pre></div></td></tr><tr><td>MonthDayPattern</td><td><div class=\"dni-plaintext\"><pre>MMMM dd</pre></div></td></tr><tr><td>PMDesignator</td><td><div class=\"dni-plaintext\"><pre>PM</pre></div></td></tr><tr><td>RFC1123Pattern</td><td><div class=\"dni-plaintext\"><pre>ddd, dd MMM yyyy HH&#39;:&#39;mm&#39;:&#39;ss &#39;GMT&#39;</pre></div></td></tr><tr><td>ShortDatePattern</td><td><div class=\"dni-plaintext\"><pre>MM/dd/yyyy</pre></div></td></tr><tr><td>ShortTimePattern</td><td><div class=\"dni-plaintext\"><pre>HH:mm</pre></div></td></tr><tr><td>SortableDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>yyyy&#39;-&#39;MM&#39;-&#39;dd&#39;T&#39;HH&#39;:&#39;mm&#39;:&#39;ss</pre></div></td></tr><tr><td>TimeSeparator</td><td><div class=\"dni-plaintext\"><pre>:</pre></div></td></tr><tr><td>UniversalSortableDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>yyyy&#39;-&#39;MM&#39;-&#39;dd HH&#39;:&#39;mm&#39;:&#39;ss&#39;Z&#39;</pre></div></td></tr><tr><td>YearMonthPattern</td><td><div class=\"dni-plaintext\"><pre>yyyy MMMM</pre></div></td></tr><tr><td>AbbreviatedDayNames</td><td><div class=\"dni-plaintext\"><pre>[ Sun, Mon, Tue, Wed, Thu, Fri, Sat ]</pre></div></td></tr><tr><td>ShortestDayNames</td><td><div class=\"dni-plaintext\"><pre>[ Su, Mo, Tu, We, Th, Fr, Sa ]</pre></div></td></tr><tr><td>DayNames</td><td><div class=\"dni-plaintext\"><pre>[ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ]</pre></div></td></tr><tr><td>AbbreviatedMonthNames</td><td><div class=\"dni-plaintext\"><pre>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</pre></div></td></tr><tr><td>MonthNames</td><td><div class=\"dni-plaintext\"><pre>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>NativeCalendarName</td><td><div class=\"dni-plaintext\"><pre>Gregorian Calendar</pre></div></td></tr><tr><td>AbbreviatedMonthGenitiveNames</td><td><div class=\"dni-plaintext\"><pre>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</pre></div></td></tr><tr><td>MonthGenitiveNames</td><td><div class=\"dni-plaintext\"><pre>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>OptionalCalendars</td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>MaxSupportedDateTime</td><td>12/31/9999 11:59:59 PM</td></tr><tr><td>AlgorithmType</td><td>SolarCalendar</td></tr><tr><td>CalendarType</td><td>Localized</td></tr><tr><td>Eras</td><td>[ 1 ]</td></tr><tr><td>TwoDigitYearMax</td><td>2049</td></tr><tr><td>IsReadOnly</td><td>False</td></tr></tbody></table></div></details></td></tr></tbody></table></td></tr><tr><td>UseUserOverride</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>KeyboardLayoutId</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IetfLanguageTag</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>DisplayName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>NativeName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>EnglishName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>TwoLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>iv</pre></div></td></tr><tr><td>ThreeLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>ivl</pre></div></td></tr><tr><td>ThreeLetterWindowsLanguageName</td><td><div class=\"dni-plaintext\"><pre>IVL</pre></div></td></tr><tr><td>CompareInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>CompareInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>Version</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.SortVersion</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>FullVersion</td><td><div class=\"dni-plaintext\"><pre>26777</pre></div></td></tr><tr><td>SortId</td><td><div class=\"dni-plaintext\"><pre>00006899-0000-0000-0000-00000000007f</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>TextInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>TextInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>ANSICodePage</td><td><div class=\"dni-plaintext\"><pre>1252</pre></div></td></tr><tr><td>OEMCodePage</td><td><div class=\"dni-plaintext\"><pre>437</pre></div></td></tr><tr><td>MacCodePage</td><td><div class=\"dni-plaintext\"><pre>10000</pre></div></td></tr><tr><td>EBCDICCodePage</td><td><div class=\"dni-plaintext\"><pre>37</pre></div></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>CultureName</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>ListSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>IsRightToLeft</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>IsNeutralCulture</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>CultureTypes</td><td><span>SpecificCultures, InstalledWin32Cultures</span></td></tr><tr><td>NumberFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.NumberFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>CurrencyDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>CurrencyDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>CurrencyGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>NumberGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>PercentGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>CurrencyGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>CurrencySymbol</td><td><div class=\"dni-plaintext\"><pre>&#164;</pre></div></td></tr><tr><td>NaNSymbol</td><td><div class=\"dni-plaintext\"><pre>NaN</pre></div></td></tr><tr><td>CurrencyNegativePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>NumberNegativePattern</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr><tr><td>PercentPositivePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>PercentNegativePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>NegativeInfinitySymbol</td><td><div class=\"dni-plaintext\"><pre>-Infinity</pre></div></td></tr><tr><td>NegativeSign</td><td><div class=\"dni-plaintext\"><pre>-</pre></div></td></tr><tr><td>NumberDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>NumberDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>NumberGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>CurrencyPositivePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>PositiveInfinitySymbol</td><td><div class=\"dni-plaintext\"><pre>Infinity</pre></div></td></tr><tr><td>PositiveSign</td><td><div class=\"dni-plaintext\"><pre>+</pre></div></td></tr><tr><td>PercentDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>PercentDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>PercentGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>PercentSymbol</td><td><div class=\"dni-plaintext\"><pre>%</pre></div></td></tr><tr><td>PerMilleSymbol</td><td><div class=\"dni-plaintext\"><pre>‰</pre></div></td></tr><tr><td>NativeDigits</td><td><div class=\"dni-plaintext\"><pre>[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]</pre></div></td></tr><tr><td>DigitSubstitution</td><td><span>None</span></td></tr></tbody></table></div></details></td></tr><tr><td>DateTimeFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.DateTimeFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>AMDesignator</td><td><div class=\"dni-plaintext\"><pre>AM</pre></div></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>DateSeparator</td><td><div class=\"dni-plaintext\"><pre>/</pre></div></td></tr><tr><td>FirstDayOfWeek</td><td><span>Sunday</span></td></tr><tr><td>CalendarWeekRule</td><td><span>FirstDay</span></td></tr><tr><td>FullDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>dddd, dd MMMM yyyy HH:mm:ss</pre></div></td></tr><tr><td>LongDatePattern</td><td><div class=\"dni-plaintext\"><pre>dddd, dd MMMM yyyy</pre></div></td></tr><tr><td>LongTimePattern</td><td><div class=\"dni-plaintext\"><pre>HH:mm:ss</pre></div></td></tr><tr><td>MonthDayPattern</td><td><div class=\"dni-plaintext\"><pre>MMMM dd</pre></div></td></tr><tr><td>PMDesignator</td><td><div class=\"dni-plaintext\"><pre>PM</pre></div></td></tr><tr><td>RFC1123Pattern</td><td><div class=\"dni-plaintext\"><pre>ddd, dd MMM yyyy HH&#39;:&#39;mm&#39;:&#39;ss &#39;GMT&#39;</pre></div></td></tr><tr><td>ShortDatePattern</td><td><div class=\"dni-plaintext\"><pre>MM/dd/yyyy</pre></div></td></tr><tr><td>ShortTimePattern</td><td><div class=\"dni-plaintext\"><pre>HH:mm</pre></div></td></tr><tr><td>SortableDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>yyyy&#39;-&#39;MM&#39;-&#39;dd&#39;T&#39;HH&#39;:&#39;mm&#39;:&#39;ss</pre></div></td></tr><tr><td>TimeSeparator</td><td><div class=\"dni-plaintext\"><pre>:</pre></div></td></tr><tr><td>UniversalSortableDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>yyyy&#39;-&#39;MM&#39;-&#39;dd HH&#39;:&#39;mm&#39;:&#39;ss&#39;Z&#39;</pre></div></td></tr><tr><td>YearMonthPattern</td><td><div class=\"dni-plaintext\"><pre>yyyy MMMM</pre></div></td></tr><tr><td>AbbreviatedDayNames</td><td><div class=\"dni-plaintext\"><pre>[ Sun, Mon, Tue, Wed, Thu, Fri, Sat ]</pre></div></td></tr><tr><td>ShortestDayNames</td><td><div class=\"dni-plaintext\"><pre>[ Su, Mo, Tu, We, Th, Fr, Sa ]</pre></div></td></tr><tr><td>DayNames</td><td><div class=\"dni-plaintext\"><pre>[ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ]</pre></div></td></tr><tr><td>AbbreviatedMonthNames</td><td><div class=\"dni-plaintext\"><pre>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</pre></div></td></tr><tr><td>MonthNames</td><td><div class=\"dni-plaintext\"><pre>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>NativeCalendarName</td><td><div class=\"dni-plaintext\"><pre>Gregorian Calendar</pre></div></td></tr><tr><td>AbbreviatedMonthGenitiveNames</td><td><div class=\"dni-plaintext\"><pre>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</pre></div></td></tr><tr><td>MonthGenitiveNames</td><td><div class=\"dni-plaintext\"><pre>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>OptionalCalendars</td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table></td></tr><tr><td>UseUserOverride</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>KeyboardLayoutId</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IetfLanguageTag</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>DisplayName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>NativeName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>EnglishName</td><td><div class=\"dni-plaintext\"><pre>Invariant Language (Invariant Country)</pre></div></td></tr><tr><td>TwoLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>iv</pre></div></td></tr><tr><td>ThreeLetterISOLanguageName</td><td><div class=\"dni-plaintext\"><pre>ivl</pre></div></td></tr><tr><td>ThreeLetterWindowsLanguageName</td><td><div class=\"dni-plaintext\"><pre>IVL</pre></div></td></tr><tr><td>CompareInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>CompareInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Name</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>Version</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.SortVersion</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>FullVersion</td><td><div class=\"dni-plaintext\"><pre>26777</pre></div></td></tr><tr><td>SortId</td><td><div class=\"dni-plaintext\"><pre>00006899-0000-0000-0000-00000000007f</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>TextInfo</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>TextInfo -</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>ANSICodePage</td><td><div class=\"dni-plaintext\"><pre>1252</pre></div></td></tr><tr><td>OEMCodePage</td><td><div class=\"dni-plaintext\"><pre>437</pre></div></td></tr><tr><td>MacCodePage</td><td><div class=\"dni-plaintext\"><pre>10000</pre></div></td></tr><tr><td>EBCDICCodePage</td><td><div class=\"dni-plaintext\"><pre>37</pre></div></td></tr><tr><td>LCID</td><td><div class=\"dni-plaintext\"><pre>127</pre></div></td></tr><tr><td>CultureName</td><td><div class=\"dni-plaintext\"><pre></pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>ListSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>IsRightToLeft</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>IsNeutralCulture</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>CultureTypes</td><td><span>SpecificCultures, InstalledWin32Cultures</span></td></tr><tr><td>NumberFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.NumberFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>CurrencyDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>CurrencyDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>CurrencyGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>NumberGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>PercentGroupSizes</td><td><div class=\"dni-plaintext\"><pre>[ 3 ]</pre></div></td></tr><tr><td>CurrencyGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>CurrencySymbol</td><td><div class=\"dni-plaintext\"><pre>&#164;</pre></div></td></tr><tr><td>NaNSymbol</td><td><div class=\"dni-plaintext\"><pre>NaN</pre></div></td></tr><tr><td>CurrencyNegativePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>NumberNegativePattern</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr><tr><td>PercentPositivePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>PercentNegativePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>NegativeInfinitySymbol</td><td><div class=\"dni-plaintext\"><pre>-Infinity</pre></div></td></tr><tr><td>NegativeSign</td><td><div class=\"dni-plaintext\"><pre>-</pre></div></td></tr><tr><td>NumberDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>NumberDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>NumberGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>CurrencyPositivePattern</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>PositiveInfinitySymbol</td><td><div class=\"dni-plaintext\"><pre>Infinity</pre></div></td></tr><tr><td>PositiveSign</td><td><div class=\"dni-plaintext\"><pre>+</pre></div></td></tr><tr><td>PercentDecimalDigits</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>PercentDecimalSeparator</td><td><div class=\"dni-plaintext\"><pre>.</pre></div></td></tr><tr><td>PercentGroupSeparator</td><td><div class=\"dni-plaintext\"><pre>,</pre></div></td></tr><tr><td>PercentSymbol</td><td><div class=\"dni-plaintext\"><pre>%</pre></div></td></tr><tr><td>PerMilleSymbol</td><td><div class=\"dni-plaintext\"><pre>‰</pre></div></td></tr><tr><td>NativeDigits</td><td><div class=\"dni-plaintext\"><pre>[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]</pre></div></td></tr><tr><td>DigitSubstitution</td><td><span>None</span></td></tr></tbody></table></div></details></td></tr><tr><td>DateTimeFormat</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.DateTimeFormatInfo</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>AMDesignator</td><td><div class=\"dni-plaintext\"><pre>AM</pre></div></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>DateSeparator</td><td><div class=\"dni-plaintext\"><pre>/</pre></div></td></tr><tr><td>FirstDayOfWeek</td><td><span>Sunday</span></td></tr><tr><td>CalendarWeekRule</td><td><span>FirstDay</span></td></tr><tr><td>FullDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>dddd, dd MMMM yyyy HH:mm:ss</pre></div></td></tr><tr><td>LongDatePattern</td><td><div class=\"dni-plaintext\"><pre>dddd, dd MMMM yyyy</pre></div></td></tr><tr><td>LongTimePattern</td><td><div class=\"dni-plaintext\"><pre>HH:mm:ss</pre></div></td></tr><tr><td>MonthDayPattern</td><td><div class=\"dni-plaintext\"><pre>MMMM dd</pre></div></td></tr><tr><td>PMDesignator</td><td><div class=\"dni-plaintext\"><pre>PM</pre></div></td></tr><tr><td>RFC1123Pattern</td><td><div class=\"dni-plaintext\"><pre>ddd, dd MMM yyyy HH&#39;:&#39;mm&#39;:&#39;ss &#39;GMT&#39;</pre></div></td></tr><tr><td>ShortDatePattern</td><td><div class=\"dni-plaintext\"><pre>MM/dd/yyyy</pre></div></td></tr><tr><td>ShortTimePattern</td><td><div class=\"dni-plaintext\"><pre>HH:mm</pre></div></td></tr><tr><td>SortableDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>yyyy&#39;-&#39;MM&#39;-&#39;dd&#39;T&#39;HH&#39;:&#39;mm&#39;:&#39;ss</pre></div></td></tr><tr><td>TimeSeparator</td><td><div class=\"dni-plaintext\"><pre>:</pre></div></td></tr><tr><td>UniversalSortableDateTimePattern</td><td><div class=\"dni-plaintext\"><pre>yyyy&#39;-&#39;MM&#39;-&#39;dd HH&#39;:&#39;mm&#39;:&#39;ss&#39;Z&#39;</pre></div></td></tr><tr><td>YearMonthPattern</td><td><div class=\"dni-plaintext\"><pre>yyyy MMMM</pre></div></td></tr><tr><td>AbbreviatedDayNames</td><td><div class=\"dni-plaintext\"><pre>[ Sun, Mon, Tue, Wed, Thu, Fri, Sat ]</pre></div></td></tr><tr><td>ShortestDayNames</td><td><div class=\"dni-plaintext\"><pre>[ Su, Mo, Tu, We, Th, Fr, Sa ]</pre></div></td></tr><tr><td>DayNames</td><td><div class=\"dni-plaintext\"><pre>[ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ]</pre></div></td></tr><tr><td>AbbreviatedMonthNames</td><td><div class=\"dni-plaintext\"><pre>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</pre></div></td></tr><tr><td>MonthNames</td><td><div class=\"dni-plaintext\"><pre>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>NativeCalendarName</td><td><div class=\"dni-plaintext\"><pre>Gregorian Calendar</pre></div></td></tr><tr><td>AbbreviatedMonthGenitiveNames</td><td><div class=\"dni-plaintext\"><pre>[ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,  ]</pre></div></td></tr><tr><td>MonthGenitiveNames</td><td><div class=\"dni-plaintext\"><pre>[ January, February, March, April, May, June, July, August, September, October, November, December,  ]</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Calendar</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>OptionalCalendars</td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Globalization.GregorianCalendar</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>MinSupportedDateTime</td><td><span>0001-01-01 00:00:00Z</span></td></tr><tr><td>MaxSupportedDateTime</td><td><span>9999-12-31 23:59:59Z</span></td></tr><tr><td>AlgorithmType</td><td><span>SolarCalendar</span></td></tr><tr><td>CalendarType</td><td><span>Localized</span></td></tr><tr><td>Eras</td><td><div class=\"dni-plaintext\"><pre>[ 1 ]</pre></div></td></tr><tr><td>TwoDigitYearMax</td><td><div class=\"dni-plaintext\"><pre>2049</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table></td></tr><tr><td>UseUserOverride</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>ValueType</td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/microsoft.semantickernel.connectors.openai.openaichatmessagecontent?view=net-7.0\">Microsoft.SemanticKernel.Connectors.OpenAI.OpenAIChatMessageContent</a></span></td></tr><tr><td>RenderedPrompt</td><td><div class=\"dni-plaintext\"><pre>一句话简单介绍Semantic Kernel。</pre></div></td></tr></tbody></table></div></details><style>\r\n",
       ".dni-code-hint {\r\n",
       "    font-style: italic;\r\n",
       "    overflow: hidden;\r\n",
       "    white-space: nowrap;\r\n",
       "}\r\n",
       ".dni-treeview {\r\n",
       "    white-space: nowrap;\r\n",
       "}\r\n",
       ".dni-treeview td {\r\n",
       "    vertical-align: top;\r\n",
       "    text-align: start;\r\n",
       "}\r\n",
       "details.dni-treeview {\r\n",
       "    padding-left: 1em;\r\n",
       "}\r\n",
       "table td {\r\n",
       "    text-align: start;\r\n",
       "}\r\n",
       "table tr { \r\n",
       "    vertical-align: top; \r\n",
       "    margin: 0em 0px;\r\n",
       "}\r\n",
       "table tr td pre \r\n",
       "{ \r\n",
       "    vertical-align: top !important; \r\n",
       "    margin: 0em 0px !important;\r\n",
       "} \r\n",
       "table th {\r\n",
       "    text-align: start;\r\n",
       "}\r\n",
       "</style>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<details open=\"open\" class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>LangChain是一个开源框架，旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互，将多个组件链接在一起，并集成额外的资源，例如 API 和数据库。</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>ToolCalls</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>[  ]</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>IsUndefined</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>Count</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td><i>(values)</i></td><td><i>(empty)</i></td></tr></tbody></table></div></details></td></tr><tr><td>AuthorName</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Role</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>Assistant</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Label</td><td><div class=\"dni-plaintext\"><pre>Assistant</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Content</td><td><div class=\"dni-plaintext\"><pre>LangChain是一个开源框架，旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互，将多个组件链接在一起，并集成额外的资源，例如 API 和数据库。 </pre></div></td></tr><tr><td>Items</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>[ LangChain是一个开源框架，旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互，将多个组件链接在一起，并集成额外的资源，例如 API 和数据库。  ]</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Count</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr><tr><td><i>(values)</i></td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>LangChain是一个开源框架，旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互，将多个组件链接在一起，并集成额外的资源，例如 API 和数据库。</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Text</td><td><div class=\"dni-plaintext\"><pre>LangChain是一个开源框架，旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互，将多个组件链接在一起，并集成额外的资源，例如 API 和数据库。 </pre></div></td></tr><tr><td>Encoding</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Text.UTF8Encoding+UTF8EncodingSealed</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Preamble</td><td><div class=\"dni-plaintext\"><pre>System.Text.UTF8Encoding+UTF8EncodingSealed</pre></div></td></tr><tr><td>BodyName</td><td><div class=\"dni-plaintext\"><pre>utf-8</pre></div></td></tr><tr><td>EncodingName</td><td><div class=\"dni-plaintext\"><pre>Unicode (UTF-8)</pre></div></td></tr><tr><td>HeaderName</td><td><div class=\"dni-plaintext\"><pre>utf-8</pre></div></td></tr><tr><td>WebName</td><td><div class=\"dni-plaintext\"><pre>utf-8</pre></div></td></tr><tr><td>WindowsCodePage</td><td><div class=\"dni-plaintext\"><pre>1200</pre></div></td></tr><tr><td>IsBrowserDisplay</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsBrowserSave</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsMailNewsDisplay</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsMailNewsSave</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsSingleByte</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>EncoderFallback</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Text.EncoderReplacementFallback</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>DefaultString</td><td><div class=\"dni-plaintext\"><pre>�</pre></div></td></tr><tr><td>MaxCharCount</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>DecoderFallback</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Text.DecoderReplacementFallback</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>DefaultString</td><td><div class=\"dni-plaintext\"><pre>�</pre></div></td></tr><tr><td>MaxCharCount</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>CodePage</td><td><div class=\"dni-plaintext\"><pre>65001</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>MimeType</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>InnerContent</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>ModelId</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Metadata</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table></td></tr></tbody></table></div></details></td></tr><tr><td>Encoding</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Text.UTF8Encoding+UTF8EncodingSealed</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Preamble</td><td><div class=\"dni-plaintext\"><pre>System.Text.UTF8Encoding+UTF8EncodingSealed</pre></div></td></tr><tr><td>BodyName</td><td><div class=\"dni-plaintext\"><pre>utf-8</pre></div></td></tr><tr><td>EncodingName</td><td><div class=\"dni-plaintext\"><pre>Unicode (UTF-8)</pre></div></td></tr><tr><td>HeaderName</td><td><div class=\"dni-plaintext\"><pre>utf-8</pre></div></td></tr><tr><td>WebName</td><td><div class=\"dni-plaintext\"><pre>utf-8</pre></div></td></tr><tr><td>WindowsCodePage</td><td><div class=\"dni-plaintext\"><pre>1200</pre></div></td></tr><tr><td>IsBrowserDisplay</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsBrowserSave</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsMailNewsDisplay</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsMailNewsSave</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>IsSingleByte</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td>EncoderFallback</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Text.EncoderReplacementFallback</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>DefaultString</td><td><div class=\"dni-plaintext\"><pre>�</pre></div></td></tr><tr><td>MaxCharCount</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>DecoderFallback</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>System.Text.DecoderReplacementFallback</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>DefaultString</td><td><div class=\"dni-plaintext\"><pre>�</pre></div></td></tr><tr><td>MaxCharCount</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>CodePage</td><td><div class=\"dni-plaintext\"><pre>65001</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Source</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>MimeType</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>InnerContent</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>OpenAI.Chat.ChatCompletion</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>CreatedAt</td><td><span>2024-10-31 01:59:51Z</span></td></tr><tr><td>FinishReason</td><td><span>Stop</span></td></tr><tr><td>ContentTokenLogProbabilities</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>[  ]</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>IsUndefined</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>Count</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td><i>(values)</i></td><td><i>(empty)</i></td></tr></tbody></table></div></details></td></tr><tr><td>RefusalTokenLogProbabilities</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>[  ]</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>IsUndefined</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>Count</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td><i>(values)</i></td><td><i>(empty)</i></td></tr></tbody></table></div></details></td></tr><tr><td>Role</td><td><span>Assistant</span></td></tr><tr><td>Content</td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>OpenAI.Chat.ChatMessageContentPart</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Kind</td><td><span>Text</span></td></tr><tr><td>Text</td><td><div class=\"dni-plaintext\"><pre>LangChain是一个开源框架，旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互，将多个组件链接在一起，并集成额外的资源，例如 API 和数据库。 </pre></div></td></tr><tr><td>ImageUri</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>ImageBytes</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>ImageBytesMediaType</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>ImageDetailLevel</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Refusal</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table></td></tr><tr><td>ToolCalls</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>[  ]</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>IsUndefined</td><td><div class=\"dni-plaintext\"><pre>True</pre></div></td></tr><tr><td>Count</td><td><div class=\"dni-plaintext\"><pre>0</pre></div></td></tr><tr><td>IsReadOnly</td><td><div class=\"dni-plaintext\"><pre>False</pre></div></td></tr><tr><td><i>(values)</i></td><td><i>(empty)</i></td></tr></tbody></table></div></details></td></tr><tr><td>Refusal</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>FunctionCall</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Id</td><td><div class=\"dni-plaintext\"><pre>chatcmpl-35e6c1c8d4274161bcf82b0ca383294a</pre></div></td></tr><tr><td>Model</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>SystemFingerprint</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td>Usage</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>OpenAI.Chat.ChatTokenUsage</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>OutputTokenCount</td><td><div class=\"dni-plaintext\"><pre>90</pre></div></td></tr><tr><td>InputTokenCount</td><td><div class=\"dni-plaintext\"><pre>38</pre></div></td></tr><tr><td>TotalTokenCount</td><td><div class=\"dni-plaintext\"><pre>128</pre></div></td></tr><tr><td>OutputTokenDetails</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table></div></details></td></tr><tr><td>ModelId</td><td><div class=\"dni-plaintext\"><pre>lite</pre></div></td></tr><tr><td>Metadata</td><td><table><thead><tr><th><i>key</i></th><th><i>type</i></th><th>value</th></tr></thead><tbody><tr><td><div class=\"dni-plaintext\"><pre>Id</pre></div></td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/system.string?view=net-7.0\">System.String</a></span></td><td><div class=\"dni-plaintext\"><pre>chatcmpl-35e6c1c8d4274161bcf82b0ca383294a</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>CreatedAt</pre></div></td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/system.datetimeoffset?view=net-7.0\">System.DateTimeOffset</a></span></td><td><span>2024-10-31 01:59:51Z</span></td></tr><tr><td><div class=\"dni-plaintext\"><pre>SystemFingerprint</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>Usage</pre></div></td><td>OpenAI.Chat.ChatTokenUsage</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>OpenAI.Chat.ChatTokenUsage</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>OutputTokenCount</td><td><div class=\"dni-plaintext\"><pre>90</pre></div></td></tr><tr><td>InputTokenCount</td><td><div class=\"dni-plaintext\"><pre>38</pre></div></td></tr><tr><td>TotalTokenCount</td><td><div class=\"dni-plaintext\"><pre>128</pre></div></td></tr><tr><td>OutputTokenDetails</td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr></tbody></table></div></details></td></tr><tr><td><div class=\"dni-plaintext\"><pre>Refusal</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td><td><div class=\"dni-plaintext\"><pre>&lt;null&gt;</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>FinishReason</pre></div></td><td><span><a href=\"https://docs.microsoft.com/dotnet/api/system.string?view=net-7.0\">System.String</a></span></td><td><div class=\"dni-plaintext\"><pre>Stop</pre></div></td></tr><tr><td><div class=\"dni-plaintext\"><pre>ContentTokenLogProbabilities</pre></div></td><td>OpenAI.ChangeTrackingList&lt;OpenAI.Chat.ChatTokenLogProbabilityDetails&gt;</td><td></td></tr></tbody></table></td></tr></tbody></table></div></details><style>\r\n",
       ".dni-code-hint {\r\n",
       "    font-style: italic;\r\n",
       "    overflow: hidden;\r\n",
       "    white-space: nowrap;\r\n",
       "}\r\n",
       ".dni-treeview {\r\n",
       "    white-space: nowrap;\r\n",
       "}\r\n",
       ".dni-treeview td {\r\n",
       "    vertical-align: top;\r\n",
       "    text-align: start;\r\n",
       "}\r\n",
       "details.dni-treeview {\r\n",
       "    padding-left: 1em;\r\n",
       "}\r\n",
       "table td {\r\n",
       "    text-align: start;\r\n",
       "}\r\n",
       "table tr { \r\n",
       "    vertical-align: top; \r\n",
       "    margin: 0em 0px;\r\n",
       "}\r\n",
       "table tr td pre \r\n",
       "{ \r\n",
       "    vertical-align: top !important; \r\n",
       "    margin: 0em 0px !important;\r\n",
       "} \r\n",
       "table th {\r\n",
       "    text-align: start;\r\n",
       "}\r\n",
       "</style>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "using Microsoft.SemanticKernel.ChatCompletion;\n",
    "\n",
    "// 获取Kernel服务\n",
    "var kernel = serviceProvider.GetKeyedService<Kernel>(\"oneapi\");\n",
    "var response = await kernel.InvokePromptAsync(\"一句话简单介绍Semantic Kernel。\");\n",
    "response.Display();\n",
    "\n",
    "var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();\n",
    "var chatCompletionResponse = await chatCompletionService.GetChatMessageContentAsync(\"一句话简单介绍LangChain。\");\n",
    "chatCompletionResponse.Display();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "参考：\n",
    "https://devblogs.microsoft.com/semantic-kernel/using-semantic-kernel-with-dependency-injection/\n",
    "\n",
    "https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/DependencyInjection/HttpClient_Registration.cs"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".NET (C#)",
   "language": "C#",
   "name": ".net-csharp"
  },
  "language_info": {
   "name": "csharp"
  },
  "polyglot_notebook": {
   "kernelInfo": {
    "defaultKernelName": "csharp",
    "items": [
     {
      "aliases": [],
      "name": "csharp"
     }
    ]
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
